前言
之前專題老師非常奇杷,說不需要我們做出東西來,只需要讀書,那時候我們本來覺得超級爽,不用忙專題,但是後來才知道是痛苦的開始,老師讓我們讀了一本非常厚的教導Linux核心的書,我們讀不到1/4就有人想退出了,後來老師又有新玩法改了題目,出來工作後才發現這些基礎其實有些對我現在還是很重要,算是有打好基礎。
一、系統程式設計
- 即為進行系統軟體(system software)的撰寫,系統軟體位於低階層,可以直接跟核心(Kernel)及基礎系統程式庫(core system library)互動,較不同於應用軟體層,應用軟體層的執行須透過系統程式所提供的基礎功能。
系統軟體有:
- shell
- 文字編輯器
- 編譯器
- 除錯器
- 網路伺服器
- 網頁伺服器
- 資料庫
二、Linux 系統程式三大基礎
- Linux 系統程式設計有三大基礎: 系統呼叫、C 程式庫、C 編譯器。系統呼叫(system call),就是程式對於函式庫的調用,藉此進入核心,以便向作業系統請求特定的服務或資源,ex:read()、write()。user-space application(使用者空間應用程式)不得直接執行 kernel space(核心空間)程式碼或操作核心資料,是為了基於安全性和可靠性的原因,因此 kernel 須提供一個機制讓 user-space application 可以藉由"signal(通知)"的方式,對 kernel 告知 user-space application 所需調用的系統呼叫為哪一個,使應用程式可以藉由明確的機制進入 kernel space 執行 kernel 允許的程式碼。
- C 程式庫(libc)為 Unix 應用程式的中心元件,可以提供基礎服務(core service)以及簡化的系統呼叫調用(system call invocation),而 gcc 為 GNU 編譯器族系的統稱,且 gcc 也是一個用來調用 C 編譯器的執行檔。
三、API & ABI
- API 為應用程式設計介面(application programming interface),就是藉由定義特定的介面,使程式開發者可以在不了解底層程式碼或工作程序就可以對作業系統或函式庫呼叫出功能來,API 可確保原始碼相容性,只要藉由特定
規則的呼叫就可以使用其功能。
- ABI 為應用程式二元碼介面(application binary interface),使一段object code 得以直接使用在相同 ABI 系統上,而不需要重新編譯。
四、Linux 程式設計的概念
- Linux 遵循一切皆為檔案,許多操作是透過檔案的讀寫來進行,在 Linux核心中,以檔案描述器(file descriptor,簡稱為 fd)的整數來進行操作檔案,進行檔案的開啟、操作、關閉及其他工作。
五、正規檔案
- 一般人所謂的檔案就是 Linux 的正規檔案,包含資料的位元組,使用者可以對檔案內任何位元組進行讀寫的操作,這些操作會始於一個特定的位元組,為一個概念上的 location(位置),此位子又稱為檔案位置(file postition)或是檔案偏移量(file offset)。
- 一開始位置為 0
- 檔案中的位元組被讀或寫時,會逐位元組遞增檔案位置
- 可以手動設定檔案位置
- 若將位置寫為結尾之後,那結尾至位置之間會補 0
- 不可以將檔案位置設定為檔案開頭之前
- 檔案位置不可為負值
- 目前的檔案位置存取就 linux 為 64 位元大小。
參考資料
- 書籍 : The Linux Programming Interface國際中文版(上)